package com.atguigu.campusintelligentassistantsystem.service;

import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

@Service
public class AiService {

    @Autowired
    private Generation generation;

    @Value("${aliyun.bailian.model-name:qwen-plus}")
    private String modelName;

    /**
     * 生成AI回答
     * @param question 用户问题
     * @return AI回答内容
     */
    public String generateAnswer(String question) {
        try {
            // 创建系统消息和用户消息
            Message systemMsg = Message.builder()
                    .role(Role.SYSTEM.getValue())
                    .content("你是一个校园智能助手，专门回答与校园生活、学习相关的问题。")
                    .build();
            Message userMsg = Message.builder()
                    .role(Role.USER.getValue())
                    .content(question)
                    .build();
            
            // 构建消息列表
            List<Message> messages = Arrays.asList(systemMsg, userMsg);

            // 构建生成参数，调用AI模型
            GenerationParam param = GenerationParam.builder()
                    .model(modelName)
                    .messages(messages)
                    .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                    .build();

            // 调用阿里云百炼模型生成回答
            GenerationResult result = generation.call(param);
            return result.getOutput().getChoices().get(0).getMessage().getContent();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            e.printStackTrace();
            return "AI服务暂时不可用，请稍后再试";
        }
    }

    /**
     * 生成学习资料
     * @param demand 学习需求
     * @return 生成的学习资料
     */
    public String generateStudyMaterial(String demand) {
        try {
            String prompt = "请根据以下学习需求生成相应的学习资料:\n" + demand + "\n\n要求内容结构清晰，包含必要的知识点和示例。";
            
            // 创建系统消息和用户消息
            Message systemMsg = Message.builder()
                    .role(Role.SYSTEM.getValue())
                    .content("你是一个学习助手，专门帮助学生生成学习资料和复习提纲。")
                    .build();
            Message userMsg = Message.builder()
                    .role(Role.USER.getValue())
                    .content(prompt)
                    .build();
            
            // 构建消息列表
            List<Message> messages = Arrays.asList(systemMsg, userMsg);

            // 构建生成参数
            GenerationParam param = GenerationParam.builder()
                    .model(modelName)
                    .messages(messages)
                    .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                    .build();

            // 调用阿里云百炼模型生成学习资料
            GenerationResult result = generation.call(param);
            return result.getOutput().getChoices().get(0).getMessage().getContent();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            e.printStackTrace();
            return "学习资料生成失败，请稍后再试";
        }
    }
}